Django中分页
py文件代码
"""自定义分页组件可以返回分页的数据和分页的HTML代码"""from django.http import QueryDictclass Pagination(object): def __init__(self, current_page, total_count, url_prefix, query_dict=QueryDict(mutable=True), per_page=10, show_page=9): """ 初始化分分页器 :param url_prefix: a标签的URL前缀 :param current_page: 当前页码数 :param total_count: 数据总数 :param query_dict: 空的QueryDict()对象,并且是可修改的 :param per_page: 每一页显示多少数据, 默认值是10 :param show_page: 页面显示的页码数, 默认值是9 """ # 0.分页的URL前缀 self.url_prefix = url_prefix self.query_dict = query_dict # 1. 每一页显示10条数据 self.per_page = per_page assert per_page > 0 # 2. 计算需要多少页 total_page, more = divmod(total_count, per_page) if more: total_page += 1 self.total_page = total_page # 3. 当前页码 try: current_page = int(current_page) except Exception as e: current_page = 1 current_page = total_page if current_page > total_page else current_page # 页码必须是大于0的数 if current_page < 1: current_page = 1 self.current_page = current_page # 4. 页面最多显示的页码数 self.show_page = show_page # 5. 最多显示页码的一半 self.half_show_page = self.show_page // 2 @property def start(self): # 数据切片的开始位置 return self.per_page * (self.current_page - 1) @property def end(self): # 数据切片的结束为止 return self.current_page * self.per_page # 定义一个返回HTML代码的方法 def page_html(self): # 如果总页码数小于最大要显示的页码数 if self.total_page < self.show_page: show_page_start = 1 show_page_end = self.total_page # 左边越界 elif self.current_page - self.half_show_page < 1: show_page_start = 1 show_page_end = self.show_page # 右边越界 elif self.current_page + self.half_show_page > self.total_page: show_page_end = self.total_page show_page_start = self.total_page - self.show_page + 1 else: show_page_start = self.current_page - self.half_show_page # 页面显示页码的结束 show_page_end = self.current_page + self.half_show_page # 生成分页的HTML代码 page_list = [] # 添加分页代码的前缀 page_list.append(' ') page_html = ''.join(page_list) return page_html
实例化对象
def dashboard(request): # 获取当前网页路径 url_prefix = request.path_info # 获取当前页码数 current_page = request.GET.get('page', 1) # 获取所有客户的信息 customer_list = Customer.objects.all() # 实例分页代码 pagination = Pagination(current_page=current_page, total_count=customer_list.count(), url_prefix=url_prefix, per_page=8) # 获取当前页的数据 data = customer_list[pagination.start:pagination.end] page_html = pagination.page_html() return render(request, "Dashboard.html", {'customer_list': data, "page_html": page_html})
前端代码
使用django脚本去创建数据
- 批量创建数据
- 使用Django脚本去创建数据
- bulk_create()
- 分页
- 纯Python基础写的,
- django里面获取当前url
- request.path_info 获取当前路径
- request.get_full_path 获取全路径
实际样式